import logging
import os
from logging.handlers import TimedRotatingFileHandler
from datetime import datetime

# 日志保存路径（项目根目录下的logs文件夹）
LOG_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'logs')
if not os.path.exists(LOG_DIR):
    os.makedirs(LOG_DIR)  # 自动创建logs文件夹

# 日志格式（包含时间、级别、模块、消息）
LOG_FORMAT = '%(asctime)s - %(levelname)s - %(module)s:%(lineno)d - %(message)s'
DATE_FORMAT = '%Y-%m-%d %H:%M:%S'

def get_logger(name):
    """获取配置好的日志器"""
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)  # 全局日志级别

    # 避免重复添加处理器
    if logger.handlers:
        return logger

    # 1. 控制台处理器（输出INFO及以上级别）
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.INFO)
    console_handler.setFormatter(logging.Formatter(LOG_FORMAT, datefmt=DATE_FORMAT))

    # 2. 文件处理器（按天分割，保留30天日志，输出所有级别）
    log_filename = os.path.join(LOG_DIR, f"app_{datetime.now().strftime('%Y%m%d')}.log")
    file_handler = TimedRotatingFileHandler(
        filename=log_filename,
        when='midnight',  # 每天凌晨分割
        interval=1,
        backupCount=30,  # 保留30天日志
        encoding='utf-8'
    )
    file_handler.setLevel(logging.DEBUG)
    file_handler.setFormatter(logging.Formatter(LOG_FORMAT, datefmt=DATE_FORMAT))

    # 添加处理器到日志器
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)

    return logger